package cn.lcsjsxy.yxc.incommonuse.Date;

import org.junit.jupiter.api.Test;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.TemporalAccessor;

import static java.time.format.DateTimeFormatter.ofLocalizedDateTime;

public class InstantTest {
    /**
     * Instant的使用
     */
    @Test
    public void test(){
        Instant instant=Instant.now();  //now()获取本初子午线对应的标准时间
        System.out.println(instant);  //2025-03-31T11:42:51.762993500Z  有八个小时的时差

        //添加偏移量
        OffsetDateTime offsetDateTime=instant.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime);  //2025-03-31T19:46:33.609790700+08:00 时区加了8个小时

        //toEpochMilli():获取自1970年1月1日0时0分0秒（UTC）开始的毫秒数
        long milli=instant.toEpochMilli();
        System.out.println(milli);

        //ofEpochMilli():通过给定的毫秒数，获取Instant
        Instant instant1=Instant.ofEpochMilli(1743421791474L);
        System.out.println(instant1);
    }

    /**
     * DateTimeFormatter：格式化或解析日期，时间
     * 类似于SimpleDateFormat
     */
    @Test
    public void test1(){
        //实例化方式：
        //方式一：预定义的标准格式。如：ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
        DateTimeFormatter isoLocalDateTime = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        //格式化
        LocalDateTime localDateTime=LocalDateTime.now();
        String string=isoLocalDateTime.format(localDateTime);
        System.out.println(localDateTime);
        System.out.println(string);

        //解析：字符串-->日期
        TemporalAccessor parse=isoLocalDateTime.parse(string);
        System.out.println(parse);

        //方式二：本地化相关的格式。如：ofLocalizedDateTime()
        //FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT:使用于LocalDateTime
        DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
        //格式化
        String string1=dateTimeFormatter.format(localDateTime);
        System.out.println(string1); //short 2025/3/31 20:58

        //本地化相关的格式。如：ofLocalizedDate()
        //FormatStyle.FULL/FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT:适用于LocalDate
        DateTimeFormatter dateTimeFormatter1=DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
        //格式化
        String string2=dateTimeFormatter1.format(LocalDate.now());
        System.out.println(string2);

        //方式三：自定义的格式。如：ofPattern("yyyy-MM-dd hh:mm:ss E")
        DateTimeFormatter dateTimeFormatter2=DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
        //格式化
        String string3=dateTimeFormatter2.format(LocalDateTime.now());
        System.out.println(string3);

        //解析
        TemporalAccessor parse2=dateTimeFormatter2.parse("2025-03-31 09:10:01");
        System.out.println(parse2);
    }
}
